package command

type Styles uint32

const (
	StyleOptional   = 0x01 // 可选参数
	StyleRepeatable = 0x02 // 可重复出现的
	StylePosition   = 0x04 // 位置参数
	StyleSingle     = 0x08 // 单一 key 的形式

)

// 可选且唯一	0-1		[-xxx]
// 可选可重复	0-N		[-xxx ...]
// 必须且唯一	1		{-xxx} 或者 -xxx
// 必选可重复	1-N		{-xxx ...}

func (s Styles) IsOptional() bool {
	return (s & StyleOptional) != 0
}

func (s Styles) IsRequired() bool {
	return (s & StyleOptional) == 0
}

func (s Styles) IsPosition() bool {
	return (s & StylePosition) != 0
}

func (s Styles) IsKeyStyle() bool {
	return (s & StylePosition) == 0
}

func (s Styles) IsRepeatable() bool {
	return (s & StyleRepeatable) != 0
}

type Option struct {
	Styles  Styles
	Pos     int
	Keys    []string
	Default string
	Accept  func(o *Option, pos int, key string, value string) (string, bool)
}

func AcceptDefault(o *Option, pos int, key string, value string) (string, bool) {
	return value, true
}

type Command struct {
	Target  string
	Action  string
	Options []*Option
}
